home *** CD-ROM | disk | FTP | other *** search
/ Fritz: All Fritz / All Fritz.zip / All Fritz / FILES / DEMO_VGA / FRSTM1.LZH / XBITASM.ASM < prev   
Assembly Source File  |  1989-03-06  |  2KB  |  112 lines

  1. ; Xbitasm.asm by Mark C. Peterson, CompuServe [70441,3353]
  2.  
  3. _TEXT SEGMENT BYTE PUBLIC 'CODE'
  4. ASSUME CS:_TEXT
  5.  
  6. ;int near _cdecl XBitShift(XBIT x, int XBytes, int ShiftBits)
  7. x              equ      [bp + 6]
  8. XBytes         equ      [bp + 8]
  9. ShiftBits      equ      [bp + 10]
  10.  
  11. PUBLIC _XBitShift
  12. _XBitShift       PROC     FAR
  13.       push  bp
  14.       mov   bp, sp
  15.       push  si
  16.       xor   ax, ax
  17.       mov   bx, ShiftBits
  18.       or    bx, bx
  19.       jz    ExitXBitShift
  20.       jns   ShiftXBitsLeft
  21.       neg   bx
  22.  
  23. ShiftXBitsRight:
  24.       mov   si, x
  25.       mov   cx, XBytes
  26.       add   si, cx
  27.       clc
  28.  
  29. ShiftNextByteRight:
  30.       dec   si
  31.       rcr   BYTE PTR [si], 1
  32.       loop  ShiftNextByteRight
  33.  
  34.       dec   bx
  35.       jnz   ShiftXBitsRight
  36.       jmp   ExitXBitShift
  37.  
  38. ShiftXBitsLeft:
  39.       mov   si, x
  40.       mov   cx, XBytes
  41.       clc
  42.  
  43. ShiftNextByteLeft:
  44.       rcl   BYTE PTR [si], 1
  45.       inc   si
  46.       loop  ShiftNextByteLeft
  47.  
  48.       adc   ax, 0
  49.       dec   bx
  50.       jnz   ShiftXBitsLeft
  51.  
  52. ExitXBitShift:
  53.       pop   si
  54.       pop   bp
  55.       ret
  56. _XBitShift     ENDP
  57.  
  58.  
  59.  
  60. ;void near _cdecl XBitNegate(XBIT x, int XBytes);
  61. x              equ      [bp + 6]
  62. XBytes         equ      [bp + 8]
  63.  
  64. PUBLIC _XBitNegate
  65. _XBitNegate    PROC     FAR
  66.       push  bp
  67.       mov   bp, sp
  68.       push  si
  69.       xor   ax, ax
  70.       mov   si, x
  71.       mov   cx, XBytes
  72.       dec   cx
  73.       add   si, cx
  74.       cmp   WORD PTR [si], 8000h
  75.       jne   Negate
  76. ChkNextWord:
  77.       dec   si
  78.       dec   si
  79.       cmp   WORD PTR [si], 0
  80.       jne   Negate
  81.       loop  ChkNextWord
  82.  
  83.       add   si, XBytes
  84.       dec   si
  85.       mov   BYTE PTR [si], 0
  86.       inc   ax
  87.       jmp   ExitXBitNegate
  88.  
  89. Negate:
  90.       mov   si, x
  91.       mov   cx, XBytes
  92.       clc
  93.  
  94. NegateNextByte:
  95.       not   WORD PTR [si]
  96.       adc   WORD PTR [si], ax
  97.       inc   si
  98.       inc   si
  99.       dec   cx
  100.       loop  NegateNextByte
  101.  
  102. ExitXBitNegate:
  103.       pop   si
  104.       pop   bp
  105.       ret
  106. _XBitNegate    ENDP
  107.  
  108. _TEXT    ENDS
  109.  
  110. END
  111.  
  112.